home *** CD-ROM | disk | FTP | other *** search
- /*
- * $RCSfile: undoCreateIndex.C,v $
- * $Revision: 1.1.1.1 $
- * $Date: 1996/05/04 21:56:03 $
- */
- #include "BTREEPAGE.h"
- #ifdef INIT_LRC_IS_LSN
- # include "log_globals.h"
- #endif
- #include "undo_extfuncs.h"
-
-
- void undoCreateIndex(LOGRECORDHDR* recordHeader)
- {
- #ifdef INIT_LRC_IS_LSN
- LRC tempLRC;
- LRC* lrc = &tempLRC;
- #else
- LRC* lrc;
- #endif
- TRANSREC *transRec = (TRANSREC*) Active->transRec;
- INIT_MISSING_UPDATE_INFO(transRec);
- PID *pid = &recordHeader->actionPid;
- INDEXDESC *desc = (INDEXDESC*) GET_LOG_IMAGE(recordHeader, 0);
-
- TRPRINT(TR_IO, TR_LEVEL_1, ("lsn:%d", recordHeader->recordLSN));
- TRPRINT(TR_IO|TR_LOG, TR_LEVEL_2, ("pid:%d", pid->page));
-
- #ifdef DEBUG
- int length = (int) GET_LOG_IMAGE_SIZE(recordHeader, 0);
- ASSERT3(length == ALIGNSIZE(sizeof(*desc)));
- #endif
-
- GROUPLINK *groupLink = bf_ReadPage(UserBufGroup, pid,
- BTREE_PAGE2SIZE, BF_SEM);
- if (!groupLink) {
- SM_ERROR(TYPE_FATAL, Active->errno);
- }
-
- INDEXDESCPAGE* p = (INDEXDESCPAGE*) groupLink->bufFrame;
-
- BOOL actionDone = compareLRC( &recordHeader->actionLRC, &p->lrc) <= 0;
-
- #ifndef INIT_LRC_IS_LSN
- SM_ASSERT(LEVEL_3, missingUpdateInfo != NULL);
- #endif INIT_LRC_IS_LSN
-
- RECORD_MISSING_UPDATE(actionDone, &lrc, missingUpdateInfo, pid,
- & p->lrc, groupLink->pageHash, recordHeader,
- PAGE_INDEX);
-
- GENERATE_LRC(lrc);
-
- LSNOFFSET undoNextLSN = recordHeader->previousLSN;
-
- signalSemaphore( & groupLink->pageHash->semaphore);
-
- bf_UnfixPage(groupLink, BF_DEFAULT, FALSE);
-
- if (actionDone) {
- switch (desc->ndxType) {
- case SM_BTREENDX:
- if (bt_DestroyBtree(transRec->tid, desc->rootPid,
- UserBufGroup)) {
- SM_ERROR(TYPE_FATAL, esmINTERNAL);
- }
- break;
- default:
- SM_ERROR(TYPE_CRASH, esmINTERNAL);
- }
- }
-
- BT_LogPureCLR(undoNextLSN);
- }
-